package com.ort.ezcalendar.calendar;

import java.util.Calendar;

import android.app.Activity;
import android.app.Dialog;
import android.content.Context;
import android.os.Bundle;
import android.view.GestureDetector;
import android.view.GestureDetector.OnGestureListener;
import android.view.MotionEvent;
import android.view.View;
import android.view.animation.AnimationUtils;
import android.widget.AdapterView.OnItemClickListener;
import android.widget.AdapterView;
import android.widget.Button;
import android.widget.GridView;
import android.widget.Toast;

import com.markupartist.android.widget.ActionBar;
import com.ort.ezcalendar.R;

public class CalendarioActivity extends Activity implements OnGestureListener {

	private GestureDetector gDetector;
	private AdapterCalendario adapter;
	private final String[] meses = new String[] { "Enero", "Febrero", "Marzo",
			"Abril", "Mayo", "Junio", "Julio", "Agosto", "Setiembre",
			"Octubre", "Noviembre", "Diciembre" };
	// Mes actual que MUESTRA la actividad
	private int mesActual, anioActual;
	GridView grilla;
	Button actual;

	@Override
	public void onCreate(Bundle savedInstanceState) {
		super.onCreate(savedInstanceState);
		setContentView(R.layout.activity_calendario);
		grilla = (GridView) findViewById(R.id.calendar);
		Calendar c = Calendar.getInstance();
		mesActual = c.get(Calendar.MONTH);
		anioActual = c.get(Calendar.YEAR);
		actual = (Button) findViewById(R.id.mesActual);
		actual.setText(String.format("%s %s", meses[mesActual], anioActual));
		adapter = new AdapterCalendario(getApplicationContext());
		adapter.notifyDataSetChanged();
		
		grilla.setAdapter(adapter);		
		ActionBar actionBar = (ActionBar) findViewById(R.id.actionbar);
		actionBar.setHomeLogo(R.drawable.logo_blanco);
		gDetector = new GestureDetector(this);

	}
	
	public void mesAnterior() {
		desplazarDerecha();
		if (mesActual == Calendar.JANUARY) {
			mesActual = 11;
			anioActual--;
		} else {
			mesActual--;
		}
		actual.setText(String.format("%s %s", meses[mesActual], anioActual));
		adapter.disminuirMes();
		adapter.notifyDataSetChanged();
		grilla.postDelayed(new Runnable() {
			public void run() {
				aparecer();
			}
		}, 300);
	}

	public void mesSiguiente() {
		desplazarIzquierda();
		if (mesActual == Calendar.DECEMBER) {
			mesActual = Calendar.JANUARY;
			anioActual++;
		} else {
			mesActual++;
		}
		actual.setText(String.format("%s %s", meses[mesActual], anioActual));
		adapter.aumentarMes();
		adapter.notifyDataSetChanged();
		grilla.postDelayed(new Runnable() {
			public void run() {
				aparecer();
			}
		}, 300);
	}

	public void onClickMesAnterior(View v) {
		mesAnterior();
	}

	public void onClickMesSiguiente(View v) {
		mesSiguiente();
	}

	public void onClickMedio(View v) {
		Calendar c = Calendar.getInstance();
		mesActual = c.get(Calendar.MONTH);
		anioActual = c.get(Calendar.YEAR);
		actual.setText(String.format("%s %s", meses[mesActual], anioActual));
		adapter.mesActual();
		adapter.notifyDataSetChanged();
		aparecer();
	}

	public void desplazarDerecha() {
		grilla.startAnimation(AnimationUtils.loadAnimation(this,
				R.anim.anim_desplazar_derecha));
	}

	public void desplazarIzquierda() {
		grilla.startAnimation(AnimationUtils.loadAnimation(this,
				R.anim.anim_desplazar_izquierda));
	}

	public void aparecer() {
		grilla.startAnimation(AnimationUtils.loadAnimation(this,
				R.anim.anim_aparecer));
	}

	public boolean onDown(MotionEvent arg0) {
		// TODO Auto-generated method stub
		return false;
	}

	public boolean onFling(MotionEvent e1, MotionEvent e2, float velocityX,
			float velocityY) {
		if (e1.getRawX() > e2.getRawX()) {
			// Movimiento hacia la izquierda
			mesSiguiente();
		} else {
			// Movimiento hacia la derecha
			mesAnterior();
		}
		return true;
	}

	public void onLongPress(MotionEvent e) {
		// TODO Auto-generated method stub

	}

	public boolean onScroll(MotionEvent e1, MotionEvent e2, float distanceX,
			float distanceY) {
		// TODO Auto-generated method stub
		return false;
	}

	public void onShowPress(MotionEvent e) {
		// TODO Auto-generated method stub

	}

	public boolean onSingleTapUp(MotionEvent e) {
		// TODO Auto-generated method stub
		return false;
	}

	@Override
	public boolean onTouchEvent(MotionEvent me) {
		return gDetector.onTouchEvent(me);
	}
}
